var Index = function() {
	return {
		// main function
		init: function() {
			Metronic.addResizeHandler(function() {
				jQuery('.vmaps').each(function() {
					var map = jQuery(this);
					map.width(map.parent().width());
				});
			});
		},
		initJQVMAP: function() {
			if (!jQuery().vectorMap) {
				return;
			}
			var showMap = function(name) {
				jQuery('.vmaps').hide();
				jQuery('#vmap_' + name).show();
			}
			var setMap = function(name) {
				var data = {
					map: 'world_en',
					backgroundColor: null,
					borderColor: '#333333',
					borderOpacity: 0.5,
					borderWidth: 1,
					color: '#c6c6c6',
					enableZoom: true,
					hoverColor: '#c9dfaf',
					hoverOpacity: null,
					values: sample_data,
					normalizeFunction: 'linear',
					scaleColors: ['#b6da93', '#909cae'],
					selectedColor: '#c9dfaf',
					selectedRegion: null,
					showTooltip: true,
					onLabelShow: function(event, label, code) {
					},
					onRegionOver: function(event, code) {
						if (code == 'ca') {
							event.preventDefault();
						}
					},
					onRegionClick: function(element, code, region) {
						var message = '您点击的城市【 ' + region + '】的代码为: ' + code.toUpperCase();
						alert(message);
					}
				};
				data.map = name + '_en';
				var map = jQuery('#vmap_' + name);
				if (!map) {
					return;
				}
				map.width(map.parent().parent().width());
				map.show();
				map.vectorMap(data);
				map.hide();
			}
			setMap("world");
			setMap("usa");
			setMap("europe");
			setMap("russia");
			setMap("germany");
			showMap("world");
			jQuery('#regional_stat_world').click(function() {
				showMap("world");
			});
			jQuery('#regional_stat_usa').click(function() {
				showMap("usa");
			});
			jQuery('#regional_stat_europe').click(function() {
				showMap("europe");
			});
			jQuery('#regional_stat_russia').click(function() {
				showMap("russia");
			});
			jQuery('#regional_stat_germany').click(function() {
				showMap("germany");
			});
			$('#region_statistics_loading').hide();
			$('#region_statistics_content').show();
		},
		initCalendar: function() {
			if (!jQuery().fullCalendar) {
				return;
			}
			var date = new Date();
			var d = date.getDate();
			var m = date.getMonth();
			var y = date.getFullYear();
			var h = {};
			if ($('#calendar').width() <= 400) {
				$('#calendar').addClass("mobile");
				h = {
					left: 'title, prev, next',
					center: '',
					right: 'today,month,agendaWeek,agendaDay'
				};
			} else {
				$('#calendar').removeClass("mobile");
				if (Metronic.isRTL()) {
					h = {
						right: 'title',
						center: '',
						left: 'prev,next,today,month,agendaWeek,agendaDay'
					};
				} else {
					h = {
						left: 'title',
						center: '',
						right: 'prev,next,today,month,agendaWeek,agendaDay'
					};
				}
			}
			$('#calendar').fullCalendar('destroy');
			// destroy the calendar
			$('#calendar').fullCalendar({
				// re-initialize the calendar
				disableDragging: false,
				header: h,
				editable: true,
				events: [{
					title: 'All Day',
					start: new Date(y, m, 1),
					backgroundColor: Metronic.getBrandColor('yellow')
				}, {
					title: 'Long Event',
					start: new Date(y, m, d - 5),
					end: new Date(y, m, d - 2),
					backgroundColor: Metronic.getBrandColor('blue')
				}, {
					title: 'Repeating Event',
					start: new Date(y, m, d - 3, 16, 0),
					allDay: false,
					backgroundColor: Metronic.getBrandColor('red')
				}, {
					title: 'Repeating Event',
					start: new Date(y, m, d + 6, 16, 0),
					allDay: false,
					backgroundColor: Metronic.getBrandColor('green')
				}, {
					title: 'Meeting',
					start: new Date(y, m, d + 9, 10, 30),
					allDay: false
				}, {
					title: 'Lunch',
					start: new Date(y, m, d, 14, 0),
					end: new Date(y, m, d, 14, 0),
					backgroundColor: Metronic.getBrandColor('grey'),
					allDay: false
				}, {
					title: 'Birthday',
					start: new Date(y, m, d + 1, 19, 0),
					end: new Date(y, m, d + 1, 22, 30),
					backgroundColor: Metronic.getBrandColor('purple'),
					allDay: false
				}, {
					title: 'Click for Google',
					start: new Date(y, m, 28),
					end: new Date(y, m, 29),
					backgroundColor: Metronic.getBrandColor('yellow'),
					url: 'http://google.com/'
				}]
			});
		},
		initCharts: function() {
			if (!jQuery.plot) {
				return;
			}
			function showChartTooltip(x, y, xValue, yValue) {
				$('<div id="tooltip" class="chart-tooltip">' + yValue + '<\/div>').css({
					position: 'absolute',
					display: 'none',
					top: y - 40,
					left: x - 40,
					border: '0px solid #ccc',
					padding: '2px 6px',
					'background-color': '#fff'
				}).appendTo("body").fadeIn(200);
			}

			var data = [];
			var totalPoints = 250;
			// random data generator for plot charts
			function getRandomData() {
				if (data.length > 0)
					data = data.slice(1);
				// do a random walk
				while (data.length < totalPoints) {
					var prev = data.length > 0 ? data[data.length - 1] : 50;
					var y = prev + Math.random() * 10 - 5;
					if (y < 0)
						y = 0;
					if (y > 100)
						y = 100;
					data.push(y);
				}
				// zip the generated y values with the x values
				var res = [];
				for (var i = 0; i < data.length; ++i)
					res.push([i, data[i]])
				return res;
			}

			function randValue() {
				return (Math.floor(Math.random() * (1 + 50 - 20))) + 10;
			}

			var visitors = [['02/2013', 1500], ['03/2013', 2500], ['04/2013', 1700], ['05/2013', 800], ['06/2013', 1500], ['07/2013', 2350], ['08/2013', 1500], ['09/2013', 1300], ['10/2013', 4600]];
			if ($('#site_statistics').size() != 0) {
				$('#site_statistics_loading').hide();
				$('#site_statistics_content').show();
				var plot_statistics = $.plot($("#site_statistics"), [{
					data: visitors,
					lines: {
						fill: 0.6,
						lineWidth: 0
					},
					color: ['#f89f9f']
				}, {
					data: visitors,
					points: {
						show: true,
						fill: true,
						radius: 5,
						fillColor: "#f89f9f",
						lineWidth: 3
					},
					color: '#fff',
					shadowSize: 0
				}], {
					xaxis: {
						tickLength: 0,
						tickDecimals: 0,
						mode: "categories",
						min: 0,
						font: {
							lineHeight: 14,
							style: "normal",
							variant: "small-caps",
							color: "#6F7B8A"
						}
					},
					yaxis: {
						ticks: 5,
						tickDecimals: 0,
						tickColor: "#eee",
						font: {
							lineHeight: 14,
							style: "normal",
							variant: "small-caps",
							color: "#6F7B8A"
						}
					},
					grid: {
						hoverable: true,
						clickable: true,
						tickColor: "#eee",
						borderColor: "#eee",
						borderWidth: 1
					}
				});
				var previousPoint = null;
				$("#site_statistics").bind("plothover", function(event, pos, item) {
					$("#x").text(pos.x.toFixed(2));
					$("#y").text(pos.y.toFixed(2));
					if (item) {
						if (previousPoint != item.dataIndex) {
							previousPoint = item.dataIndex;
							$("#tooltip").remove();
							var x = item.datapoint[0].toFixed(2)
								, y = item.datapoint[1].toFixed(2);
							showChartTooltip(item.pageX, item.pageY, item.datapoint[0], item.datapoint[1] + ' visits');
						}
					} else {
						$("#tooltip").remove();
						previousPoint = null;
					}
				});
			}
			if ($('#site_activities').size() != 0) {
				// site activities
				var previousPoint2 = null;
				$('#site_activities_loading').hide();
				$('#site_activities_content').show();
				var data1 = [['DEC', 300], ['JAN', 600], ['FEB', 1100], ['MAR', 1200], ['APR', 860], ['MAY', 1200], ['JUN', 1450], ['JUL', 1800], ['AUG', 1200], ['SEP', 600]];
				var plot_statistics = $.plot($("#site_activities"), [{
					data: data1,
					lines: {
						fill: 0.2,
						lineWidth: 0
					},
					color: ['#BAD9F5']
				}, {
					data: data1,
					points: {
						show: true,
						fill: true,
						radius: 4,
						fillColor: "#9ACAE6",
						lineWidth: 2
					},
					color: '#9ACAE6',
					shadowSize: 1
				}, {
					data: data1,
					lines: {
						show: true,
						fill: false,
						lineWidth: 3
					},
					color: '#9ACAE6',
					shadowSize: 0
				}], {
					xaxis: {
						tickLength: 0,
						tickDecimals: 0,
						mode: "categories",
						min: 0,
						font: {
							lineHeight: 18,
							style: "normal",
							variant: "small-caps",
							color: "#6F7B8A"
						}
					},
					yaxis: {
						ticks: 5,
						tickDecimals: 0,
						tickColor: "#eee",
						font: {
							lineHeight: 14,
							style: "normal",
							variant: "small-caps",
							color: "#6F7B8A"
						}
					},
					grid: {
						hoverable: true,
						clickable: true,
						tickColor: "#eee",
						borderColor: "#eee",
						borderWidth: 1
					}
				});
				$("#site_activities").bind("plothover", function(event, pos, item) {
					$("#x").text(pos.x.toFixed(2));
					$("#y").text(pos.y.toFixed(2));
					if (item) {
						if (previousPoint2 != item.dataIndex) {
							previousPoint2 = item.dataIndex;
							$("#tooltip").remove();
							var x = item.datapoint[0].toFixed(2)
								, y = item.datapoint[1].toFixed(2);
							showChartTooltip(item.pageX, item.pageY, item.datapoint[0], item.datapoint[1] + 'M$');
						}
					}
				});
				$('#site_activities').bind("mouseleave", function() {
					$("#tooltip").remove();
				});
			}
		},
		initMiniCharts: function() {
			if (!jQuery().easyPieChart || !jQuery().sparkline) {
				return;
			}
			// IE8 Fix: function.bind polyfill
			if (Metronic.isIE8() && !Function.prototype.bind) {
				Function.prototype.bind = function(oThis) {
					if (typeof this !== "function") {
						// closest thing possible to the ECMAScript 5 internal IsCallable function
						throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
					}
					var aArgs = Array.prototype.slice.call(arguments, 1)
						, fToBind = this
						, fNOP = function() {
					}, fBound = function() {
						return fToBind.apply(this instanceof fNOP && oThis ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments)));
					};
					fNOP.prototype = this.prototype;
					fBound.prototype = new fNOP();
					return fBound;
				}
			}
			$('.easy-pie-chart .number.transactions').easyPieChart({
				animate: 1000,
				size: 75,
				lineWidth: 3,
				barColor: Metronic.getBrandColor('yellow')
			});
			$('.easy-pie-chart .number.visits').easyPieChart({
				animate: 1000,
				size: 75,
				lineWidth: 3,
				barColor: Metronic.getBrandColor('green')
			});
			$('.easy-pie-chart .number.bounce').easyPieChart({
				animate: 1000,
				size: 75,
				lineWidth: 3,
				barColor: Metronic.getBrandColor('red')
			});
			$('.easy-pie-chart-reload').click(function() {
				$('.easy-pie-chart .number').each(function() {
					var newValue = Math.floor(100 * Math.random());
					$(this).data('easyPieChart').update(newValue);
					$('span', this).text(newValue);
				});
			});
			$("#sparkline_bar").sparkline([8, 9, 10, 11, 10, 10, 12, 10, 10, 11, 9, 12, 11, 10, 9, 11, 13, 13, 12], {
				type: 'bar',
				width: '100',
				barWidth: 5,
				height: '55',
				barColor: '#35aa47',
				negBarColor: '#e02222'
			});
			$("#sparkline_bar2").sparkline([9, 11, 12, 13, 12, 13, 10, 14, 13, 11, 11, 12, 11, 11, 10, 12, 11, 10], {
				type: 'bar',
				width: '100',
				barWidth: 5,
				height: '55',
				barColor: '#ffb848',
				negBarColor: '#e02222'
			});
			$("#sparkline_line").sparkline([9, 10, 9, 10, 10, 11, 12, 10, 10, 11, 11, 12, 11, 10, 12, 11, 10, 12], {
				type: 'line',
				width: '100',
				height: '55',
				lineColor: '#ffb848'
			});
		},
		initChat: function() {
			var cont = $('#chats');
			var list = $('.chats', cont);
			var form = $('.chat-form', cont);
			var input = $('input', form);
			var btn = $('.btn', form);
			var handleClick = function(e) {
				e.preventDefault();
				var text = input.val();
				if (text.length == 0) {
					return;
				}
				var time = new Date();
				var time_str = (time.getHours() + ':' + time.getMinutes());
				var tpl = '';
				tpl += '<li class="out">';
				tpl += '<img class="avatar" alt="" src="' + Layout.getLayoutImgPath() + 'avatar1.jpg"/>';
				tpl += '<div class="message">';
				tpl += '<span class="arrow"></span>';
				tpl += '<a href="#" class="name">Bob Nilson</a>&nbsp;';
				tpl += '<span class="datetime">at ' + time_str + '</span>';
				tpl += '<span class="body">';
				tpl += text;
				tpl += '</span>';
				tpl += '</div>';
				tpl += '</li>';
				var msg = list.append(tpl);
				input.val("");
				var getLastPostPos = function() {
					var height = 0;
					cont.find("li.out, li.in").each(function() {
						height = height + $(this).outerHeight();
					});
					return height;
				}
				cont.find('.scroller').slimScroll({
					scrollTo: getLastPostPos()
				});
			}
			$('body').on('click', '.message .name', function(e) {
				e.preventDefault(); // prevent click event
				var name = $(this).text(); // get clicked user's full name
				input.val('@' + name + ':'); // set it into the input field
				Metronic.scrollTo(input); // scroll to input if needed
			});
			btn.click(handleClick);
			input.keypress(function(e) {
				if (e.which == 13) {
					handleClick(e);
					return false; // <---- Add this line
				}
			});
		},
		initDashboardDaterange: function() {
			if (!jQuery().daterangepicker) {
				return;
			}
			$('#dashboard-report-range').daterangepicker({
				opens: (Metronic.isRTL() ? 'right' : 'left'),
				startDate: moment().subtract(29, 'days'), // 修改：将数字放在days、month等的前面
				endDate: moment(),
				minDate: '01/01/2012',
				maxDate: '12/31/2014',
				dateLimit: {
					days: 60
				},
				showDropdowns: false,
				showWeekNumbers: true,
				timePicker: false,
				timePickerIncrement: 1,
				timePicker12Hour: true,
				ranges: {
					'Today': [moment(), moment()],
					'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
					'Last 7 Days': [moment().subtract(6, 'days'), moment()],
					'Last 30 Days': [moment().subtract(29, 'days'), moment()],
					'This Month': [moment().startOf('month'), moment().endOf('month')],
					'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
				},
				buttonClasses: ['btn btn-sm'],
				applyClass: ' blue',
				cancelClass: 'default',
				format: 'YYYY/MM/DD',
				separator: ' to ',
				locale: {
					applyLabel: 'Apply',
					fromLabel: 'From',
					toLabel: 'To',
					customRangeLabel: 'Custom Range',
					// daysOfWeek : [ 'Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa' ],
					daysOfWeek: ['日', '一', '二', '三', '四', '五', '六'],
					// monthNames : [ 'January', 'February', 'March', 'April', 'May',
					// 'June', 'July', 'August', 'September', 'October', 'November',
					// 'December' ],
					monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '冬月', '腊月'],
					firstDay: 1
				}
			}, function(start, end) {
				$('#dashboard-report-range span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
			});
			$('#dashboard-report-range span').html(moment().subtract(29, 'days').format('MMMM D, YYYY') + ' - ' + moment().format('MMMM D, YYYY'));
			$('#dashboard-report-range').show();
		},
		/**
		 * 登出
		 */
		logout: function() {
			$.post("passport/logout", {'_': (+new Date())}, function(data) {
				if (data.code == "000000") {
					window.location.href = "login";
				} else {
					Alert.error(data.message);
					window.location.href = "login?_=" + (+new Date());
				}
			});
		},
		/**
		 * 初始化下拉列表
		 * @param selectClass 下拉框的 Class
		 * @param dictName 数据库中数据字典名称
		 * @param firstEmpty 第一个选项是否为空
		 */
		initSelectOptions: function(selectClass, dictName, firstEmpty) {
			$.ajax({
				type: 'GET',
				url: 'dict/getByName?name=' + dictName, // menu.type
				cache: true,
				dataType: 'JSON'
			}).done(function(data) {
				var options = [];
				if (firstEmpty) {
					options = [{value: '', label: '请选择…'}];
				}
				$.each(data, function(i, val) {
					options.push({
						value: val.value,
						label: val.text
					});
				});
				$('.' + selectClass).multiselect('dataprovider', options); // select-menuType
			}).fail(function(err) {
				console.log("失败回调");
			});
		}
	};
}();
